import auth from "../utils/auth.js";
import { pub } from "./event.js";

const configdata = require("../config.js")

const install = (Vue, vm) => {
	// 此为自定义配置参数，具体参数见上方说明
	Vue.prototype.$u.http.setConfig({
		baseUrl: configdata.hostUrl,
		loadingText: 'loading..',
		loadingTime: 800,
		originalData:true,
		showLoading:false
		// 设置自定义头部content-type
		// header: {
		// 	'content-type': 'xxx'
		// }
		// ......
	});

	Vue.prototype.$u.http.interceptor.request = (config) => {
		console.log('请求拦截',config)
		const token = uni.getStorageSync('token');
		if (config.url.includes('/login/')){
			return config
		}
		
		if (config.url.includes('bgyx/bgyx/changeavatar')){
			return config
		}
		
		if (config.url.includes('common/common')){
			return config
		}
		
		config.header.version = configdata.version
		// #ifdef APP
			config.header.device = "app"
		// #endif
		if(token){
			config.header.Authorization = "Bearer " + token;
		}else{
			if(vm.$store.state.common.islogin){
				return false
			}
			 vm.$u.route('/pages/login/login')
			 return false
		}
		
		return config;
	}

	Vue.prototype.$u.http.interceptor.response = (res) => {
		console.log("响应拦截",res)
		if (res.statusCode == 200) {
			return res.data;
		} else if(res.statusCode == 409){
			vm.$store.commit(`config/setAppVersion`, res.data.upversion)
			if(vm.$store.state.common.isupdate){
				return false
			}
			uni.redirectTo({
				url:"/pages/login/version"
			})
			return false
		} else if(res.statusCode == 401){
			const token = uni.getStorageSync("token")
			const refreshToken = uni.getStorageSync("refreshToken")
			if(!token || !refreshToken){
				if(vm.$store.state.common.islogin){
					return false
				}
				uni.showToast({
					title:"请登录",
					icon:"none"
				})
				uni.redirectTo({
					url:"/pages/login/login"
				})
				return false;
			}
			
			
			return new Promise((r)=>{
				vm.$u.post(`login/login/refreshTokenLoginApp`,{token:refreshToken}).then(resx=>{
					if(resx.data && resx.success){
						uni.setStorageSync("token",resx.data.token)
						uni.setStorageSync("refreshToken",resx.data.refreshToken)
						const requestObj = res.requestOption
						requestObj.header.Authorization = "Bearer " + resx.data.token;
						vm.$u.http.request({
							...requestObj,
						}).then(nres=>{
							if(nres.success){
								r(nres)
							}else{
								if(vm.$store.state.common.islogin){
									r(false)
									return
								}
								uni.showToast({
									title:"请登录",
									icon:"none"
								})
								uni.redirectTo({
									url:"/pages/login/login"
								})
								r(false);
							}
						})
					}else{
						auth.removeAuthorization()
						pub("logout",{})
						uni.showToast({
							title:"请登录",
							icon:"none"
						})
						uni.redirectTo({
							url:"/pages/login/login"
						})
						r(false);
					}
				})
			})
		}else {
			return res.data
		}
		// else if (res.code == 201) {
		// 	// 假设201为token失效，这里跳转登录
		// 	vm.$u.toast('验证失败，请重新登录');
		// 	setTimeout(() => {
		// 		// 此为uView的方法，详见路由相关文档
		// 		vm.$u.route('/pages/user/login')
		// 	}, 1500)
		// 	return false;
		// } else {
		// 	// 如果返回false，则会调用Promise的reject回调，
		// 	// 并将进入this.$u.post(url).then().catch(res=>{})的catch回调中，res为服务端的返回值
		// 	return false;
		// }
	}
}

export default {
	install
}